package view;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import dao.util.HibernateUtil;

import negocio.basica.Configuracao;
import negocio.basica.Parceiro;
import negocio.basica.Propaganda;
import negocio.basica.Unidade;
import negocio.basica.Usuario;

public class mainTeste {
	private static Scanner leitor = new Scanner(System.in);
	static boolean verdade = true;

	private static void cabecalho() {
		System.out.println("------------------");
		System.out.println("Trabalho FSM ");
		System.out
				.println("Alunos: Jonas Olimpio, Carlos Victor, Elaine Michelly, Ronaldo Moura");
		System.out.println("------------------");
	}

	private static void menu() {
		System.out.println("----------- Menu --------------- ");
		System.out.println("1 - Unidades ");
		System.out.println("2 - usuario ");
		System.out.println("3 - parceiro ");
		System.out.println("4 - contrato de propaganda ");
		System.out.println("0 - sair     ");
		System.out.println("Digite a opcao:");

	}

	private static void crud() {
		System.out.println("----------- Menu(CRUD) --------------- ");
		System.out.println("1 - Inserir ");
		System.out.println("2 - Alterar ");
		System.out.println("3 - Excluir ");
		System.out.println("4 - Listar ");
		System.out.println("0 - sair    ");
		System.out.println("Digite a opcao:");
	}

	private static List listar(Object obj) {
		if (obj instanceof Unidade) {
			HibernateUtil.beginTransaction();

			List<Unidade> list = HibernateUtil.getSession().createCriteria(Unidade.class).list();
			HibernateUtil.commitTransaction();
			System.out.println("Listando Unidades");
			System.out.println(" ");
			for (Unidade unidade : list) {
				System.out.println(unidade + "\n");
			}
			return list;
		}else if (obj instanceof Usuario) {
			HibernateUtil.beginTransaction();

			List<Usuario> list = HibernateUtil.getSession().createCriteria(Usuario.class).list();
			HibernateUtil.commitTransaction();
			System.out.println("Listando Usuarios");
			System.out.println(" ");
			for (Usuario usuario : list) {
				System.out.println(usuario + "\n");
			}
			return list;
		}
		// Session session = home.get;
		// session.createCriteria(Unidade.class).list();
		return null;

	}

	public static void main(String[] args) {
		int opcao = 0;
		int subOpcao = 0;
		Object object = null;

		cabecalho();

		while (verdade) {
			menu();
			try {
				opcao = leitor.nextInt();
			} catch (NumberFormatException e) {

				e.printStackTrace();
				opcao = 0;
			}

			crud();
			subOpcao = 0;
			try {
				subOpcao = leitor.nextInt();
			} catch (NumberFormatException e) {
				e.printStackTrace();
				subOpcao = 0;
			}

			switch (opcao) {
			case 1:
				acoesUnidade(subOpcao);
				object = new Unidade();
				break;
			case 2:
				acoesUsuario(subOpcao);
				object = new Usuario();
				break;
			case 3:
				object = new Parceiro();
				break;
			case 4:
				object = new Propaganda();
				break;
			case 0:
				verdade = false;
				break;

			default:
				System.out.println("Digite uma opcao correta!");
				break;
			}
			if (object != null) {
				listar(object);
				object = null;
			}
		}
		main(null);

		/*
		 * Pessoa p = new Pessoa(); //p.setCodigoPessoa(1);
		 * p.setDataCadastro(new Date()); p.setNome("Thiago Ribeiro Tavares");
		 * ControladorPessoa cp = new ControladorPessoa(); cp.incluir(p);
		 * ControladorUsuario c = new ControladorUsuario(); Usuario u = new
		 * Usuario();
		 * 
		 * u.setLogin("trt"); u.setPessoa(p); u.setSituacao(new Character('S'));
		 * u.setSenha("123");
		 * 
		 * c.incluir(u);
		 */
	}

	private static void acoesUnidade(int subOpcao) {
		switch (subOpcao) {
		case 1:

			Configuracao config = new Configuracao();
			config.setId(1);

			String nome,
			cnpj;
			int cod;

			System.out.println("Digite os campos");
			System.out.println("Codigo da Unidade");
			cod = leitor.nextInt();
			System.out.println("Digite o nome da unidade");
			leitor.nextLine();
			nome = leitor.nextLine();

			System.out.println("Digite o cnpj da unidade");
			cnpj = leitor.nextLine();
			HibernateUtil.beginTransaction();
			Unidade unidade = new Unidade(cod, config, nome, cnpj);
			HibernateUtil.getSession().save(unidade);
			HibernateUtil.commitTransaction();
			HibernateUtil.closeSession();
			System.out.println("Inserido com sucesso");

			// obj = new Unidade(cod, configuracao, nome, cnpj);
			break;
		case 2:
			Unidade unidadeToList = new Unidade();
			Unidade unidadeAlterada = new Unidade();
			List listaUnidade = listar(unidadeToList);
			System.out.println("Digite o cod do item que deseja alterar");
			int escolhaAlterar = leitor.nextInt();
			for (Object object2 : listaUnidade) {
				if (escolhaAlterar == ((Unidade) object2).getCod()) {
					unidadeAlterada = (Unidade) object2;
				}
			}

			int escolheuOq = 0;
			System.out.println("Deseja alterar o nome da unidade? 1-sim 2-nao");
			escolheuOq = leitor.nextInt();
			if (escolheuOq == 1) {
				System.out.println("Digite o nome:");
				String nomeAlterado = leitor.next();
				leitor.nextLine();
				unidadeAlterada.setNome(nomeAlterado);
			}
			System.out
					.println("Deseja alterar a sigla da unidade? 1-sim 2-nao");
			escolheuOq = leitor.nextInt();
			if (escolheuOq == 1) {
				System.out.println("Digite a Sigla:");
				String siglaAlterada = leitor.next();
				leitor.nextLine();
				unidadeAlterada.setSigla(siglaAlterada);
			}
			System.out.println("Deseja alterar o cnpj da unidade? 1-sim 2-nao");
			escolheuOq = leitor.nextInt();
			if (escolheuOq == 1) {
				System.out.println("Digite o cnpj");
				String cnpjAlterado = leitor.next();
				leitor.nextLine();
				unidadeAlterada.setCnpj(cnpjAlterado);
			}
			HibernateUtil.beginTransaction();
			HibernateUtil.getSession().saveOrUpdate(unidadeAlterada);
			HibernateUtil.commitTransaction();
			HibernateUtil.closeSession();

			break;
		case 3:
			unidadeToList = new Unidade();
			unidade = new Unidade();
			listaUnidade = listar(unidadeToList);
			System.out.println("Digite o cod do item que deseja excluir");
			int escolha = leitor.nextInt();
			for (Object object2 : listaUnidade) {
				if (escolha == ((Unidade) object2).getCod()) {
					unidade = (Unidade) object2;
				}
			}
			HibernateUtil.beginTransaction();
			HibernateUtil.getSession().delete(unidade);
			HibernateUtil.commitTransaction();
			HibernateUtil.closeSession();

			break;
		case 4:
			listaUnidade = new ArrayList();
			unidadeToList = new Unidade();
			listaUnidade = listar(unidadeToList);

			break;
		case 0:
			verdade = false;
			break;

		default:
			System.out.println("Digite uma opção correta");
			break;
		}

	}

	public static void acoesUsuario(int subOpcao) {
		switch (subOpcao) {
		case 1:
			String login,
			senha,nome;
			int cod;

			System.out.println("Digite os campos");
			System.out.println("Codigo");
			cod = leitor.nextInt();
			System.out.println("Digite o nome");
			leitor.nextLine();
			nome = leitor.nextLine();
			System.out.println("Digite o login");
			leitor.nextLine();
			login = leitor.nextLine();
			System.out.println("Digite o senha");
			leitor.nextLine();
			senha = leitor.nextLine();

			HibernateUtil.beginTransaction(); //inicia seção
			Usuario usuario = new Usuario(cod, login, senha, nome); //setar campos
			HibernateUtil.getSession().save(usuario);//monta salvar
			HibernateUtil.commitTransaction();//commit do processo
			HibernateUtil.closeSession();//fecha conexão
			System.out.println("Inserido com sucesso");

			// obj = new Unidade(cod, configuracao, nome, cnpj);
			break;
		case 2:
			Usuario unidadeToList = new Usuario();
			Usuario unidadeAlterada = new Usuario();
			List<Usuario> listaUnidade = listar(unidadeToList);
			System.out.println("Digite o cod");
			int escolhaAlterar = leitor.nextInt();
			for (Usuario object2 : listaUnidade) {
				if (escolhaAlterar == ((Usuario) object2).getCod()) {
					unidadeAlterada = (Usuario) object2;
				}
			}

			int escolheuOq = 0;
			System.out.println("Deseja alterar o nome? 1-sim 2-nao");
			escolheuOq = leitor.nextInt();
			if (escolheuOq == 1) {
				System.out.println("Digite o nome:");
				String nomeAlterado = leitor.next();
				leitor.nextLine();
				unidadeAlterada.setNome(nomeAlterado);
			}
			System.out.println("Deseja alterar o login? 1-sim 2-nao");
			escolheuOq = leitor.nextInt();
			if (escolheuOq == 1) {
				System.out.println("Digite a login:");
				String siglaAlterada = leitor.next();
				leitor.nextLine();
				unidadeAlterada.setLogin(siglaAlterada);
			}
			System.out.println("Deseja alterar a senha? 1-sim 2-nao");
			escolheuOq = leitor.nextInt();
			if (escolheuOq == 1) {
				System.out.println("Digite a senha");
				String senhaNova = leitor.next();
				leitor.nextLine();
				unidadeAlterada.setSenha(senhaNova);
			}
			
			HibernateUtil.beginTransaction();
			HibernateUtil.getSession().saveOrUpdate(unidadeAlterada);
			HibernateUtil.commitTransaction();
			HibernateUtil.closeSession();

			break;
		case 3:
			unidadeToList = new Usuario();
			usuario = new Usuario();
			listaUnidade = listar(unidadeToList);
			System.out.println("Digite o cod do usuario que deseja excluir");
			int escolha = leitor.nextInt();
			for (Object object2 : listaUnidade) {
				if (escolha == ((Usuario) object2).getCod()) {
					usuario = (Usuario) object2;
				}
			}
			HibernateUtil.beginTransaction();
			HibernateUtil.getSession().delete(usuario);
			HibernateUtil.commitTransaction();
			HibernateUtil.closeSession();

			break;
		case 4:
			listaUnidade = new ArrayList();
			unidadeToList = new Usuario();
			listaUnidade = listar(unidadeToList);

			break;
		case 0:
			verdade = false;
			break;

		default:
			System.out.println("Digite uma opção correta");
			break;
		}
	}
}
